package com.work.yshop.provider;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

/**
 * 文章数据内容提供者
 */
public class ArticleProvider extends ContentProvider {

    private static final String TAG = "ArticleProvider";

    // 数据库名
    private static final String DATABASE_NAME = "articles.db";
    // 数据库版本
    private static final int DATABASE_VERSION = 1;
    // 表名
    public static final String TABLE_ARTICLES = "articles";
    
    // 授权URI
    public static final String AUTHORITY = "com.work.yshop.provider.article";
    // 内容URI
    public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + TABLE_ARTICLES);
    
    // URI匹配码
    private static final int ARTICLES = 1;
    private static final int ARTICLE_ID = 2;
    
    // URI匹配器
    private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    
    static {
        sUriMatcher.addURI(AUTHORITY, TABLE_ARTICLES, ARTICLES);
        sUriMatcher.addURI(AUTHORITY, TABLE_ARTICLES + "/#", ARTICLE_ID);
    }
    
    // 数据库助手
    private DatabaseHelper mDbHelper;
    
    /**
     * 数据库助手类
     */
    private static class DatabaseHelper extends SQLiteOpenHelper {
        
        public DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
        
        @Override
        public void onCreate(SQLiteDatabase db) {
            Log.d(TAG, "创建文章数据库");
            // 创建文章表
            db.execSQL("CREATE TABLE " + TABLE_ARTICLES + " ("
                    + "_id INTEGER PRIMARY KEY AUTOINCREMENT,"
                    + "title TEXT NOT NULL,"
                    + "summary TEXT,"
                    + "content TEXT,"
                    + "image_url TEXT,"
                    + "publish_date TEXT,"
                    + "view_count INTEGER DEFAULT 0,"
                    + "category TEXT"
                    + ");");
            
            // 插入一些示例数据
            insertSampleArticles(db);
            Log.d(TAG, "数据库创建完成");
        }
        
        private void insertSampleArticles(SQLiteDatabase db) {
            Log.d(TAG, "插入示例文章数据");
            // 插入样本文章数据
            ContentValues values = new ContentValues();
            
            // 文章1
            values.put("title", "全国乡村人才工作会议在陕西召开");
            values.put("summary", "会议旨在深入贯彻落实中央农村工作会议精神，研究部署乡村人才工作");
            values.put("content", "<h1>全国乡村人才工作会议在陕西召开</h1><p>5月16日，全国乡村人才工作会议在陕西省西安市召开。会议旨在深入贯彻落实中央农村工作会议精神，研究部署乡村人才工作，为全面推进乡村振兴提供有力人才支撑。</p><p>会议强调，要坚持党管人才原则，完善乡村人才工作体制机制，健全乡村人才培养、引进、使用、流动、激励、保障等政策体系，打造一支懂农业、爱农村、爱农民的\"三农\"工作队伍。</p>");
            values.put("image_url", "https://images.pexels.com/photos/2933243/pexels-photo-2933243.jpeg");
            values.put("publish_date", "2024-05-16");
            values.put("view_count", 24752);
            values.put("category", "政策法规");
            db.insert(TABLE_ARTICLES, null, values);
            Log.d(TAG, "插入文章1: 全国乡村人才工作会议在陕西召开");
            
            // 文章2
            values.clear();
            values.put("title", "山外有山：高效种植技术分享");
            values.put("summary", "本文介绍了几种高效种植技术，帮助农民提高作物产量和质量");
            values.put("content", "<h1>山外有山：高效种植技术分享</h1><p>随着农业科技的不断发展，高效种植技术为农民朋友们带来了更多增产增收的机会。本文将分享几种实用的高效种植技术，帮助大家提高作物产量和质量。</p><h2>1. 水肥一体化技术</h2><p>水肥一体化是将灌溉与施肥结合的技术，通过灌溉系统将可溶性肥料随水一起施入土壤。这种方法不仅节约用水，还能提高肥料利用率，减少肥料流失，降低环境污染。</p><h2>2. 测土配方施肥</h2><p>测土配方施肥是根据土壤养分状况和作物需肥规律，科学合理地确定施肥种类、数量、时期和方法的技术。通过测土配方施肥，可以避免盲目施肥，提高肥料利用率，降低生产成本。</p>");
            values.put("image_url", "https://images.pexels.com/photos/440731/pexels-photo-440731.jpeg");
            values.put("publish_date", "2024-05-16");
            values.put("view_count", 28045);
            values.put("category", "种植技术");
            db.insert(TABLE_ARTICLES, null, values);
            
            // 文章3
            values.clear();
            values.put("title", "会泽：农为天下");
            values.put("summary", "会泽县积极推进农业现代化，打造高效农业示范区");
            values.put("content", "<h1>会泽：农为天下</h1><p>会泽县位于云南省东北部，是一个以农业为主的县份。近年来，会泽县积极推进农业现代化，打造高效农业示范区，取得了显著成效。</p><p>会泽县立足本地资源优势，大力发展特色农业，形成了以马铃薯、花椒、核桃为主的特色产业。同时，积极引入新技术、新品种，提高农业生产效率和产品质量。</p><p>会泽县还注重农业品牌建设，打造了\"会泽土豆\"、\"会泽花椒\"等区域公共品牌，提高了农产品的市场竞争力和附加值。</p>");
            values.put("image_url", "https://images.pexels.com/photos/2933243/pexels-photo-2933243.jpeg");
            values.put("publish_date", "2024-05-17");
            values.put("view_count", 13281);
            values.put("category", "创业资讯");
            db.insert(TABLE_ARTICLES, null, values);
            
            // 文章4
            values.clear();
            values.put("title", "稻生一本：一本农技指导手册");
            values.put("summary", "《稻生一本》是一本实用的水稻种植技术指导手册，涵盖了水稻种植全过程");
            values.put("content", "<h1>稻生一本：一本农技指导手册</h1><p>《稻生一本》是由农业专家团队编写的一本实用的水稻种植技术指导手册，涵盖了水稻种植的全过程，包括品种选择、育苗技术、田间管理、病虫害防治、收获与储存等内容。</p><h2>品种选择</h2><p>选择适合当地气候条件和土壤环境的水稻品种是成功种植的第一步。书中详细介绍了不同类型的水稻品种及其特点，帮助农民根据自身条件选择合适的品种。</p><h2>育苗技术</h2><p>育苗是水稻种植的关键环节。书中详细介绍了育苗的适宜时间、育苗方法、苗期管理等内容，帮助农民培育健壮的秧苗。</p>");
            values.put("image_url", "https://images.pexels.com/photos/2933243/pexels-photo-2933243.jpeg");
            values.put("publish_date", "2024-05-14");
            values.put("view_count", 9283);
            values.put("category", "种植技术");
            db.insert(TABLE_ARTICLES, null, values);
            
            // 文章5
            values.clear();
            values.put("title", "农业科技创新助力乡村振兴");
            values.put("summary", "科技创新是推动农业发展和乡村振兴的重要力量");
            values.put("content", "<h1>农业科技创新助力乡村振兴</h1><p>科技创新是推动农业发展和乡村振兴的重要力量。近年来，我国农业科技创新取得了显著成效，为乡村振兴提供了有力支撑。</p><h2>农业科技创新的主要成果</h2><p>1. 农作物新品种培育：通过分子育种、基因编辑等技术，培育出了一批高产、优质、抗逆的农作物新品种。</p><p>2. 智能农机装备：研发了一系列智能农机装备，实现了农业生产的机械化、自动化和智能化。</p><p>3. 绿色防控技术：开发了一批绿色防控技术，减少了化学农药的使用，保护了农业生态环境。</p>");
            values.put("image_url", "https://images.pexels.com/photos/440731/pexels-photo-440731.jpeg");
            values.put("publish_date", "2024-05-15");
            values.put("view_count", 15678);
            values.put("category", "创业资讯");
            db.insert(TABLE_ARTICLES, null, values);
            
            // 文章6 - 农资知识
            values.clear();
            values.put("title", "科学选购农药指南");
            values.put("summary", "如何选择安全有效的农药产品，避免误购假冒伪劣农药");
            values.put("content", "<h1>科学选购农药指南</h1><p>农药是现代农业生产中不可或缺的投入品，但如何选择安全有效的农药产品，避免误购假冒伪劣农药，是每个农民都应该掌握的知识。</p><h2>1. 看包装</h2><p>正规农药产品的包装上应当有完整的产品名称、有效成分及含量、毒性说明、使用方法、注意事项、生产日期、有效期、生产企业名称等信息。包装应当完好无损，无篡改痕迹。</p><h2>2. 查农药登记证号</h2><p>在农药包装上，应当有农药登记证号，可以通过农业部门网站查询该证号是否有效。</p>");
            values.put("image_url", "https://images.pexels.com/photos/2132171/pexels-photo-2132171.jpeg");
            values.put("publish_date", "2024-05-13");
            values.put("view_count", 12567);
            values.put("category", "农资知识");
            db.insert(TABLE_ARTICLES, null, values);
            
            // 文章7 - 农资知识
            values.clear();
            values.put("title", "有机肥与化肥的区别与应用");
            values.put("summary", "了解有机肥与化肥的特点及合理使用方法");
            values.put("content", "<h1>有机肥与化肥的区别与应用</h1><p>肥料是农业生产中的重要投入品，主要分为有机肥和化肥两大类。了解它们的特点及合理使用方法，对于提高作物产量和质量，保护生态环境具有重要意义。</p><h2>有机肥特点</h2><p>有机肥是指含有机质的肥料，主要来源于动植物残体、粪便等，包括农家肥、堆肥、沼气肥等。有机肥含有大量有机质，能够改良土壤结构，增加土壤肥力，提高土壤保水保肥能力，但养分含量低，见效慢。</p><h2>化肥特点</h2><p>化肥是指工业或化学方法制成的含有一种或几种农作物必需营养元素的肥料，如氮肥、磷肥、钾肥等。化肥养分含量高，见效快，但长期单一使用会导致土壤板结、酸化等问题。</p>");
            values.put("image_url", "https://images.pexels.com/photos/2346701/pexels-photo-2346701.jpeg");
            values.put("publish_date", "2024-05-12");
            values.put("view_count", 16789);
            values.put("category", "农资知识");
            db.insert(TABLE_ARTICLES, null, values);
        }
        
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // 升级数据库
            db.execSQL("DROP TABLE IF EXISTS " + TABLE_ARTICLES);
            onCreate(db);
        }
    }
    
    @Override
    public boolean onCreate() {
        mDbHelper = new DatabaseHelper(getContext());
        return true;
    }
    
    @Nullable
    @Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection,
                        @Nullable String[] selectionArgs, @Nullable String sortOrder) {
        SQLiteDatabase db = mDbHelper.getReadableDatabase();
        Cursor cursor;
        
        Log.d(TAG, "查询URI: " + uri);
        if (selection != null) {
            Log.d(TAG, "查询条件: " + selection);
        }
        
        switch (sUriMatcher.match(uri)) {
            case ARTICLES:
                // 查询所有文章
                cursor = db.query(TABLE_ARTICLES, projection, selection, selectionArgs,
                        null, null, sortOrder);
                Log.d(TAG, "查询所有文章: " + cursor.getCount() + "篇");
                break;
            case ARTICLE_ID:
                // 查询指定ID的文章
                long id = ContentUris.parseId(uri);
                cursor = db.query(TABLE_ARTICLES, projection, "_id = ?",
                        new String[]{String.valueOf(id)}, null, null, sortOrder);
                Log.d(TAG, "查询ID为" + id + "的文章: " + cursor.getCount() + "篇");
                break;
            default:
                throw new IllegalArgumentException("Unknown URI: " + uri);
        }
        
        // 设置内容观察者
        cursor.setNotificationUri(getContext().getContentResolver(), uri);
        return cursor;
    }
    
    @Nullable
    @Override
    public String getType(@NonNull Uri uri) {
        switch (sUriMatcher.match(uri)) {
            case ARTICLES:
                return "vnd.android.cursor.dir/vnd.com.work.yshop.articles";
            case ARTICLE_ID:
                return "vnd.android.cursor.item/vnd.com.work.yshop.articles";
            default:
                throw new IllegalArgumentException("Unknown URI: " + uri);
        }
    }
    
    @Nullable
    @Override
    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
        if (sUriMatcher.match(uri) != ARTICLES) {
            throw new IllegalArgumentException("Unknown URI: " + uri);
        }
        
        SQLiteDatabase db = mDbHelper.getWritableDatabase();
        long id = db.insert(TABLE_ARTICLES, null, values);
        
        if (id > 0) {
            Uri newUri = ContentUris.withAppendedId(CONTENT_URI, id);
            getContext().getContentResolver().notifyChange(newUri, null);
            return newUri;
        }
        
        return null;
    }
    
    @Override
    public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
        SQLiteDatabase db = mDbHelper.getWritableDatabase();
        int count;
        
        switch (sUriMatcher.match(uri)) {
            case ARTICLES:
                // 删除所有匹配的文章
                count = db.delete(TABLE_ARTICLES, selection, selectionArgs);
                break;
            case ARTICLE_ID:
                // 删除指定ID的文章
                long id = ContentUris.parseId(uri);
                count = db.delete(TABLE_ARTICLES, "_id = ?",
                        new String[]{String.valueOf(id)});
                break;
            default:
                throw new IllegalArgumentException("Unknown URI: " + uri);
        }
        
        if (count > 0) {
            getContext().getContentResolver().notifyChange(uri, null);
        }
        
        return count;
    }
    
    @Override
    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection,
                      @Nullable String[] selectionArgs) {
        SQLiteDatabase db = mDbHelper.getWritableDatabase();
        int count;
        
        switch (sUriMatcher.match(uri)) {
            case ARTICLES:
                // 更新所有匹配的文章
                count = db.update(TABLE_ARTICLES, values, selection, selectionArgs);
                break;
            case ARTICLE_ID:
                // 更新指定ID的文章
                long id = ContentUris.parseId(uri);
                count = db.update(TABLE_ARTICLES, values, "_id = ?",
                        new String[]{String.valueOf(id)});
                break;
            default:
                throw new IllegalArgumentException("Unknown URI: " + uri);
        }
        
        if (count > 0) {
            getContext().getContentResolver().notifyChange(uri, null);
        }
        
        return count;
    }
} 